"""
    编写学员实体类，对应属性包含：学号、姓名、性别。
    编写学员名单管理类，实现删除学员方法、查询学员方法。
    学员实体类添加一个私有属性成绩，要求实现对应的 getter 和 setter。
    实现更新学员、添加学员操作。
"""
from dataclasses import dataclass, field
from typing import List


@dataclass
class Student:
    no: int
    name: str
    sex: str
    __score: int = field(init=False, repr=False, default=0)

    @property
    def score(self):
        return self.__score

    @score.setter
    def score(self, score: int):
        if score >= 0 and score <= 100:
            self.__score = score
        else:
            print("输入成绩不正确")


@dataclass
class StudentList:
    student_list: List[Student]

    def get(self, student_id: int) -> Student:
        """
        根据 student_id 查询信息
        """
        for stu in self.student_list:
            if student_id == stu.no:
                print(f"学号为{student_id}的学员信息查询成功： 学号：{stu.no}， 姓名：{stu.name} ，性别: {stu.sex}")
                return stu
        print(f"学号为{student_id}的学员信息不存在")

    def delete(self, student_id: int):
        """
        根据 student_id 删除信息
        """
        for stu in self.student_list:
            if student_id == stu.no:
                self.student_list.remove(stu)
                print(f"学号为{student_id}的学员信息删除成功")
                return
        print(f"学员号为{student_id}的信息不存在，无法删除")

    def update(self, student: Student):
        """
        根据 student_id 更新学员信息
        """
        for stu in self.student_list:
            if student.no == stu.no:
                stu.name = student.name
                stu.sex = student.sex
                print(f"学号为{stu.no}学员信息已更新。学号 {stu.no} 姓名 {stu.name} 性别 {stu.sex}")
                return
        print(f"未查询到学号为{student.no}的学员信息，无法进行更新操作")

    def save(self, student: Student):
        """
        新增学员信息，若id存在，则给出提示
        """
        for stu in self.student_list:
            if student.no == stu.no:
                print("对应学号已存在，请重新输入学号信息")
                return
        self.student_list.append(student)
        print(f"新增学员信息成功：学号 {student.no} 姓名 {student.name} 性别 {student.sex}")

    def findAll(self) -> List[Student]:
        """
        查询所有学员信息
        """
        return self.student_list
